// 预编译
/**
 * javaScript 执行顺序
 * 
 * 1 检查通篇的语法错误
 * 2 预编译的过程
 * 3 解释一行 执行一行
 */

/**
 * 函数声明整体提升
 * 变量只有声明提升 赋值不提升
*/
// console.log(a);
// function a (a) {
//   var a = 10;
//   var a = function() {}
// }
// var a = 1
// console.log(a);

// function test (a) {
//   console.log(a);
//   var a = 1;
//   console.log(a);
//   function a() {};
//   console.log(a);
//   var b = function() {}
//   console.log(b)
//   function d() {}
// }
// test(2)

/**
 * AO avtivation object 
 * 1 寻找形参和变量声明
 * 2 实参值赋值给形参
 * 3 函数声明与赋值整体提升
 * 4 执行
 * AO = {
 * a: undefined; => 2 => function a() {} = > 1
 * b: undefined;
 * d: function d() {}
 * }
 */


// function test(a,b) {
//   console.log(a) // 1
//   c = 0;
//   var c;
//   a = 5;
//   b = 6;
//   console.log(b);  // 6
//   function b() {}; 
//   function d() {};
//   console.log(b) // 6
// }
// test(1,2)

/**
 * GO global object 
 * 1 找变量
 * 2 找函数声明
 * 3 执行
 * GO == window
 */

// var b = 3;
// console.log(a); // function a() {} 外层
// function a(a) {
//   console.log(a); // function a() {} 内层
//   a()
//   var a = 2;
//   console.log(a); // 2
//   function a() {
//     var b = 5;
//     console.log(b); // 5
//   }
// }
// a(1);

// function test() {
//   console.log(b); // undefined

//   if(a) {
//     var b = 2
//   }
//   c = 3;
//   console.log(c); // 3
// }
// var a;
// test();
// a = 1;
// console.log(a); // 1

// console.log(true && (false));

// console.log(1 > 3 || (3 > 1));

function test(a, b) {

}
console.log(test.length);
console.log(test.name);
let obj = Object.create({name: 'yz'})
console.log(obj);